package org.dr.st_docker.proxy.dynamic;

import org.dr.st_docker.proxy.RealService;
import org.dr.st_docker.proxy.Service;


import java.lang.reflect.Proxy;

/**
 *
 * jdk动态代理：
 * InvocationHandler接口主要是织入横切逻辑实现增强，并将切点和增强融合在一起形成切面
 */

// 客户端代码
public class dynamicClient {
    public static void main(String[] args) {
        RealService realService = new RealService();
        ServiceInvocationHandler handler = new ServiceInvocationHandler(realService);
        //realService.getClass().getClassLoader()获得类的class loader
        //动态产生一个代理者
        Service proxy = (Service) Proxy.newProxyInstance(realService.getClass().getClassLoader(),
                new Class<?>[]{Service.class},
                handler);
/**
 * Class<?> 表示一个泛型类型的 Class 对象数组。这里的 ? 表示通配符（wildcard），
 * 意味着这个数组可以存储任何类型的 Class 对象
 *{Service.class} 是一个初始化列表，用于初始化新创建的数组
 * new Class<?>[]{Service.class} 创建了一个只包含一个元素的 Class 对象数组
 *
        //获得类的class loader
        ClassLoader loader=realService.getClass().getClassLoader();
        //动态产生一个代理者
        Service proxy=(Service) Proxy.newProxyInstance(loader, new Class[] {Service.class}, handler);
 */
        proxy.performOperation();
    }
}